package xyz.lwm.lazycat.utility;

import xyz.lwm.lazycat.utility.metaobject.MetaObjectUtil;
import xyz.lwm.lazycat.utility.reflect.ReflectUtil;

/**
 * bean simple util
 *
 * @author lwm
 */
public abstract class BeanUtil {

    /**
     * 获取属性值
     *
     * @param bean         bean 对象
     * @param propertyName 属性名
     * @return 属性值
     */
    @SuppressWarnings("unchecked")
    public static <T> T getProperty(Object bean, String propertyName) {
        return (T) ReflectUtil.getValue(bean, propertyName);
    }

    /**
     * 设置属性值
     *
     * @param bean         bean 对象
     * @param propertyName 属性名
     * @param value        属性值
     */
    public static void setProperty(Object bean, String propertyName, Object value) {
        ReflectUtil.setValue(bean, propertyName, value);
    }

    /**
     * 复制属性值, 使用默认配置
     *
     * @param source 源对象
     * @param target 目标对象
     */
    public static void copyProperties(Object source, Object target) {
        MetaObjectUtil.copyProperties(source, target);
    }

    /**
     * 创建目标对象并复制属性值, 使用默认配置
     *
     * @param source 源对象
     * @param type 目标类型
     */
    public static <T> T copyProperties(Object source, Class<T> type) {
        return MetaObjectUtil.copyProperties(source, type);
    }

}
